【Linux】 shell 常用的数据类型(数字、字符串和数组)和运算、比较

您所在的位置:网站首页 linux shell数组 【Linux】 shell 常用的数据类型(数字、字符串和数组)和运算、比较

【Linux】 shell 常用的数据类型(数字、字符串和数组)和运算、比较

2024-06-24 19:11| 来源: 网络整理| 查看: 265

文章目录 概述1. 数字1.1 计算1.1.1 整数计算1.1.1.1 $((运算式))语法1.1.1.2 $[运算式]语法1.1.1.3 expr 算数运算符加减乘除运算 1.1.2 浮点数计算 1.2 相等性或不等判断1.2.1 []、[[]] 语法中使用==、!=进行相等性判断1.2.2 []、[[]] 语法中使用 -eq关系运算符 1.3 比较大小1.3.1 在if [] 或 if[[]] 语句中使用 数学符号> 、=、、>= 等比较符号可以用于数字的比较,但是建议禁用,改用-eq语法字符串中一般不会使用 >、>= 等比较符号,如果强行使用,表示按照字典顺序比较 ASCII码, 因为 > 本身是重定向的符号,因而在shell编程中需要加\来转义

注意:shell没有boolean 类型, f=true ,都要当做字符串来看待,比较时用类似 if [[ f == “true" ]] 语法进行比较

1. 数字

数字主要分为整数(int)和浮点数(float)

age=10 #定义一个整数10的变量名为age echo ${age} #显示该变量的值,输出结果为:10 height=190.2 #定义一个浮点数190.2的变量名为height echo ${height} #显示该变量的值,输出结果为:190.2

在这里插入图片描述

1.1 计算

如果我们想计算两个整数和两个浮点数相加在shell中应该是什么样。

1.1.1 整数计算

在shell中所有变量默认都是字符串型,不能直接运算的,如果想直接运算需要用expr算数运算符、“$((运算式))” 双括号形式 、“$[运算式]”这种形式

反例:

A=10 #定义一个变量A的值是10 B=5 #定义一个变量B的值是5 echo "$A+$B" #先按着正常的思路来看下打印值是什么 # 打印的结果为 “10+5” ,说明echo后的运算被当做字符串进行处理了 1.1.1.1 $((运算式))语法

正例:

A=10;B=5;echo "$(($A+$B))" #这样处理打印的结果就为 15 了 1.1.1.2 $[运算式]语法 A=10;B=5;echo $[$A+$B] #这样处理打印的结果就为 15 了 1.1.1.3 expr 算数运算符

算数运算符就是我们最常见的,常用的主要有+(加)、-(减)、*(乘)、/(除)、%(取余)、=(赋值)、==(等于)、!=(不等于)。

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例+加法`expr $a + $b` 结果为 30。-减法`expr $a - $b` 结果为 -10。*乘法`expr $a \* $b` 结果为  200。/除法`expr $b / $a` 结果为 2。%取余`expr $b % $a` 结果为 0。=赋值a=$b 将把变量 b 的值赋给 a。==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

加减乘除运算

shell是不支持简单的数学运算的,这时候我们就可以使用expr命令来实现shell中的简单运算,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。expr的命令使用方法是:比如1+2要写成expr 1 + 2,expr和计算公式需要写在 ` ` 中(方括号,esc下面的那个按钮)并且数值和运算符之间要有空格 `expr 1+2`是不对的。

不带运算符,会当做普通字符串进行输出:

echo "1+2" #先试下正常的运算方式能否得到结果 #打印结果 1+2

带了运算符,如果没有空格,会当做普通字符串进行输出:

echo `expr 1+2` #数值和运算符中间没有空格时 #打印结果 1+2

正例,注意乘法运算需要转义字符:

echo `expr 1 + 2` #加法 #打印结果 3 echo `expr 2 - 1` #减法 #打印结果 1 echo `expr 2 \* 3` #乘法必须要使用反斜杠才能实现 #打印结果 6 echo `expr 2 * 3` #乘法没有反斜杠时 #打印结果 expr: 语法错误 echo `expr 6 / 2` #除法 #打印结果 3 echo `expr 6 % 4` #取余 #打印结果 2 1.1.2 浮点数计算

Shell默认不支持浮点数运算,需要通过第三方库bc进行浮点运算,安装方式为:yum -y install bc

C=3.3 #给变量C赋值浮点数3.3 D=3.4 #给变量D赋值浮点数3.4 echo "$C+$D" #看下浮点数能不能正常显示出来 #浮点数可以正常显示出来 3.3+3.4 echo $[$C+$D] #再用下计算整数的方法去计算浮点数试试 #但是计算时就会报错了 -bash: 3.3+3.4: syntax error: invalid arithmetic operator (error token is ".3+3.4") echo "$C+$D" | bc #计算浮点数就需要安装第三方库bc来进行计算了 #安装bc后进行计算可以正常计算出来 6.7 bc安装方式:yum -y install bc

在这里插入图片描述

1.2 相等性或不等判断 1.2.1 []、[[]] 语法中使用==、!=进行相等性判断

进行相等性判断时,使用== 或=均可以,但是建议使用==,避免使用=,因为后者用在表达式中,有的表示赋值,尽量避免混淆,语法如下: 在这里插入图片描述

注意:if 条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

在 if 语法中,放在[] 中 ,示例:

#!/bin/bash a=10 b=20 if [ $a == $b ] then echo "a 等于 b" # 不打印 fi if [ $a != $b ] then echo "a 不等于 b" #打印 fi 1.2.2 []、[[]] 语法中使用 -eq关系运算符

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20,注意使用中括号或双中括号语法:

运算符说明举例-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

示例:

#!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a 等于 b" else echo "$a -eq $b: a 不等于 b" # 打印 fi if [ $a -ne $b ] then echo "$a -ne $b: a 不等于 b" # 打印 else echo "$a -ne $b : a 等于 b" fi if [ $a -gt $b ] then echo "$a -gt $b: a 大于 b" else echo "$a -gt $b: a 不大于 b" # 打印 fi if [ $a -lt $b ] then echo "$a -lt $b: a 小于 b" # 打印 else echo "$a -lt $b: a 不小于 b" fi if [ $a -ge $b ] then echo "$a -ge $b: a 大于或等于 b" else echo "$a -ge $b: a 小于 b" # 打印 fi if [ $a -le $b ] then echo "$a -le $b: a 小于或等于 b" # 打印 else echo "$a -le $b: a 大于 b" fi

关系运算符的应用范围只支持数字(确切的说是整数,小数暂不确定),不支持字符串,因此 建议数字 进行关系运算时采用这种方案,这样如果数字类型变量误定义为字符串类型,可以及时发现错误,例如:

[root]$ a=10;b=5a;[ $a -eq $b ] bash: [: 5a: integer expression expected # 由于b变量是字符串,执行时报类型不是整型错误 1.3 比较大小 1.3.1 在if [] 或 if[[]] 语句中使用 数学符号> 、=、、>=等 数字比较符,但是都 不建议使用,建议使用 -eq语法

但是要注意的是 [] 需要增加转义字符,原因是[]默认 不识别特殊字符,而[[]] 天生支持

a=10;b=20; [ $a


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3